package org.hang.gift.listener;

import com.alibaba.fastjson.JSONArray;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.hang.gift.constants.GiftConstants;
import org.hang.gift.doc.GiftDoc;
import org.hang.gift.repository.GiftDocRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * 监听消息队列
 * 用来将上架的礼物信息添加到es中的
 */
@Component
@RocketMQMessageListener(topic = GiftConstants.SPU_ONSALE_TX_TOPIC,consumerGroup = GiftConstants.SPU_ONSALE_TX_CONSUMER_GROUP)
public class GoodsSpuOnsaleMessageListener implements RocketMQListener<MessageExt> {

    @Autowired
    private GiftDocRepository giftDocRepository;

    @Override
    public void onMessage(MessageExt message) {
        // 1 获取消息队列中的消息
        byte[] body = message.getBody();
        //转成json字符串格式
        String str = new String(body);
        // 本来应该转成SpuOnsaleDto类型的集合，但是我们现在获取到的是一个字符串
        // 所以只要 SpuOnsaleDto类 和 GiftDoc类中的 字段名和字符串中的字段名保持一致,
        // 我们就可以直接转成另外一个对象
        List<GiftDoc> giftDocs = JSONArray.parseArray(str, GiftDoc.class);
        // 2 将商品信息存入es
        giftDocRepository.saveAll(giftDocs);
    }
}
